﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIIV.Data;
using SIIV.Business.Exceptions;

namespace SIIV.Business
{
    public class CampoBusiness
    {
        public List<Campo> ObtenerCampos(int idUsuario)
        {
            using (SIIVDataModel model = new SIIVDataModel())
            {
                return model.Campos.Include("Productor").Include("Animales").Where(c => c.Activo && c.IdVeterinario.Equals(idUsuario)).ToList();
            }
        }

        public void AgregarCampo(int idVeterinario, int idProductor, string nombre, string descripcion, string ubicacion, string region)
        {
            using (SIIVDataModel model = new SIIVDataModel())
            {
                if (model.Campos.Any(c => c.IdVeterinario.Equals(idVeterinario) && c.Nombre.Equals(nombre)))
                {
                    throw new FunctionalException("Ya existe un campo con el mismo nombre.");
                }
                model.AddToCampos(new Campo() { Activo = true, IdProductor = idProductor, IdVeterinario = idVeterinario, Nombre = nombre, Descripcion = descripcion, Ubicacion = ubicacion, Region = region });
                model.SaveChanges();
            }
        }

        public void ActualizarCampo(int idCampo, int idProductor, string nombre, string descripcion, string ubicacion, string region)
        {
            using (SIIVDataModel model = new SIIVDataModel())
            {
                Campo campo = model.Campos.Single(u => u.IdCampo.Equals(idCampo));
                if (!campo.Nombre.Equals(nombre) && model.Campos.Any(c => c.IdVeterinario.Equals(campo.IdVeterinario) && c.Nombre.Equals(nombre)))
                {
                    throw new FunctionalException("Ya existe un campo con el mismo nombre.");
                }
                campo.Nombre = nombre;
                campo.Descripcion = descripcion;
                campo.IdProductor = idProductor;
                campo.Ubicacion = ubicacion;
                campo.Region = region;
                model.SaveChanges();
            }
        }

        public void EliminarCampo(int idCampo)
        {
            using (SIIVDataModel model = new SIIVDataModel())
            {
                Campo campo = model.Campos.Single(c => c.IdCampo.Equals(idCampo));
                campo.Activo = false;
                model.SaveChanges();
            }
        }
    }
}
